package com.tedu.day02.oop;

/**
 * 抽象类与面向对象有绝对的关系
 * 使用多态创建抽象类对象
 */

abstract class Animals{
    public abstract void say();
    //1.能定义由final修饰的抽象方法吗  不可以
    // public final abstract void sleep();
    //2.能定义一个抽象的变量吗  不能
    //bstract int i=1;
    //3.能不能定义一个静态的变量 可以
    static int i=1;
    //4.可以定义一个静态的抽象变量吗 不行
    //static abstract int j=1;
    //5.可以定义一个静态的抽象方法吗【无实现】 不行  静态与抽象二选一
    //public static abstract void eat();
    //6.可以定义一个静态方法吗【无实现 空代码块】
    public static void eat(){};
    //总结5.6.--当我们遇到抽象方法：要么为静态方法，要么为抽象方法
    //7.抽象类里面能定义内部类吗（可以定义静态内部类吗） 可以
    static class Sos{}
    //8.抽象类有构造器吗 有
    public Animals() {
    }
    //9.抽象类普通方法定义 可以
    public void run(){}
    //10.抽象类可以继承吗
    abstract class Thing extends Animals{
    public abstract void sleep(); }

    //目的：实现两个抽象类当中的所有抽象方法

class Person extends Animals{
    public void say(){
        System.out.println("人---说话");
    }

}
public class 抽象类 {
    public static void main(String[] args) {
        //抽象类无法自行实现,必须由子类进行实现
        Animals a = new Person();
        a.say();  //向上造型，重写了父类的抽象方法

    }
}
